hvmloader: Replace bios_relocate hook with bios_load hook
authorKeir Fraser <keir@xen.org>
Mon, 25 Jul 2011 12:57:49 +0000 (13:57 +0100)
committerKeir Fraser <keir@xen.org>
Mon, 25 Jul 2011 12:57:49 +0000 (13:57 +0100)
Used by OVMF BIOS handler.

Signed-off-by: Bei Guan <gbtju85@gmail.com>
Signed-off-by: Keir Fraser <keir@xen.org>
tools/firmware/hvmloader/config.h
tools/firmware/hvmloader/hvmloader.c
tools/firmware/hvmloader/rombios.c
tools/firmware/hvmloader/seabios.c

index ff34b3285387ad165d321f013f454a14941ee709..eb91611e30b2ade7656dff07d2fae46e8f317d15 100644 (file)
@@ -20,11 +20,11 @@ struct bios_config {
     int load_roms;
     unsigned int optionrom_start, optionrom_end;
 
+    void (*bios_load)(const struct bios_config *config);
+
     void (*bios_info_setup)(void);
     void (*bios_info_finish)(void);
 
-    void (*bios_relocate)(void);
-
     void (*vm86_setup)(void);
     void (*e820_setup)(void);
 
index f8553bb1ecef366330d1142f00fcbdc72290f4d3..d7b8078b009ccc386a5115406be72325dc4b481d 100644 (file)
@@ -416,12 +416,13 @@ int main(void)
         bios->create_smbios_tables();
     }
 
-    printf("Loading %s ...\n", bios->name);
-    memcpy((void *)bios->bios_address, bios->image,
-           bios->image_size);
-
-    if (bios->bios_relocate)
-        bios->bios_relocate();
+    if (bios->bios_load) {
+        bios->bios_load(bios);
+    } else {
+        printf("Loading %s ...\n", bios->name);
+        memcpy((void *)bios->bios_address, bios->image,
+               bios->image_size);
+    }
 
     if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) {
         if ( bios->create_mp_tables )
index 96ba718f3fbdd579baa9525b734e3f2f5c3dc920..632ab87c4502c222dd4850137571003ff7ddb257 100644 (file)
@@ -81,11 +81,15 @@ static void rombios_setup_bios_info(void)
     memset(info, 0, sizeof(*info));
 }
 
-static void rombios_relocate(void)
+static void rombios_load(const struct bios_config *config)
 {
     uint32_t bioshigh;
     struct rombios_info *info;
 
+    printf("Loading %s ...\n", config->name);
+    memcpy((void *)config->bios_address, config->image,
+           config->image_size);
+
     bioshigh = rombios_highbios_setup();
 
     info = (struct rombios_info *)BIOS_INFO_PHYSICAL_ADDRESS;
@@ -169,11 +173,11 @@ struct bios_config rombios_config =  {
     .optionrom_start = OPTIONROM_PHYSICAL_ADDRESS,
     .optionrom_end = OPTIONROM_PHYSICAL_END,
 
+    .bios_load = rombios_load,
+
     .bios_info_setup = rombios_setup_bios_info,
     .bios_info_finish = NULL,
 
-    .bios_relocate = rombios_relocate,
-
     .vm86_setup = rombios_init_vm86_tss,
     .e820_setup = rombios_setup_e820,
 
index 5230510421c6535c918213a84f84cb71100ff47b..e1ce5552d1bd76aa434948f0f2155cc262a49431 100644 (file)
@@ -138,11 +138,11 @@ struct bios_config seabios_config = {
     .optionrom_start = 0,
     .optionrom_end = 0,
 
+    .bios_load = NULL,
+
     .bios_info_setup = seabios_setup_bios_info,
     .bios_info_finish = seabios_finish_bios_info,
 
-    .bios_relocate = NULL,
-
     .vm86_setup = NULL,
     .e820_setup = seabios_setup_e820,